// index.js
const bleManager = require('../../utils/bleManager');

Page({
  data: {
    isConnected: false,
    isSearching: false,  // 添加搜索状态
    deviceName: '',
    deviceId: '',
    batteryPercent: 0,
    voltage: 0
  },

  // 自动断开定时器
  autoDisconnectTimer: null,
  // 自动断开时间（毫秒）
  autoDisconnectDuration: 15000,
  // 开门后自动断开定时器
  doorAutoDisconnectTimer: null,
  // 开门后自动断开时间（毫秒）
  doorAutoDisconnectDuration: 10000,

  onLoad() {
    // 设置目标设备信息
    bleManager.setTargetDevice('YY0007D2', 'C0:00:00:00:07:D2');
    
    // 初始化蓝牙适配器
    bleManager.initBle().catch(err => {
      wx.showToast({
        title: '蓝牙初始化失败',
        icon: 'none'
      });
    });

    // 监听电量更新
    bleManager.onBatteryUpdate(this.handleBatteryUpdate.bind(this));
    
    // 监听连接状态变化
    bleManager.onConnectionStateChange(this.handleConnectionStateChange.bind(this));

    // 设置搜索超时时间为30秒
    bleManager.setSearchTimeout(30000);
  },

  onShow() {
    // 页面显示时检查连接状态
    if (this.data.isConnected) {
      // 如果页面显示时处于连接状态，尝试重新连接
      this.startSearch();
    }
  },

  onHide() {
    // 页面隐藏时断开连接
    if (this.data.isConnected) {
      this.disconnect();
    }
    // 如果正在搜索，停止搜索
    if (this.data.isSearching) {
      this.stopSearch();
    }
  },

  onUnload() {
    // 页面卸载时断开连接
    if (this.data.isConnected) {
      this.disconnect();
    }
    // 如果正在搜索，停止搜索
    if (this.data.isSearching) {
      this.stopSearch();
    }
  },

  // 处理连接状态变化
  handleConnectionStateChange(isConnected) {
    console.log('连接状态变化:', isConnected ? '已连接' : '已断开');
    this.setData({
      isConnected,
      isSearching: false
    });
    
    if (isConnected) {
      // 连接成功后启动自动断开定时器
      console.log('设备已连接，启动自动断开定时器');
      this.startAutoDisconnectTimer();
    } else {
      // 断开连接后清除定时器
      console.log('设备已断开，清除所有定时器');
      this.clearAutoDisconnectTimer();
      this.clearDoorAutoDisconnectTimer();
    }
  },

  // 处理电量更新
  handleBatteryUpdate(event) {
    this.setData({
      batteryPercent: event.batteryPercent,
      voltage: event.voltage
    });
  },

  // 开始搜索设备
  startSearch() {
    this.setData({ isSearching: true });
    wx.showLoading({
      title: '搜索中...',
    });

    bleManager.startSearch()
      .then(() => {
        this.setData({
          isConnected: true,
          isSearching: false,
          deviceName: bleManager.targetDeviceName,
          deviceId: bleManager.targetDeviceId
        });
        wx.showToast({
          title: '连接成功',
          icon: 'success'
        });
      })
      .catch(err => {
        console.error('连接失败:', err);
        this.setData({ isSearching: false });
        wx.showToast({
          title: '连接失败',
          icon: 'none'
        });
      })
      .finally(() => {
        wx.hideLoading();
      });
  },

  // 停止搜索
  stopSearch() {
    bleManager.stopSearch();
    this.setData({ 
      isSearching: false,
      isConnected: false
    });
    wx.showToast({
      title: '已停止搜索',
      icon: 'none'
    });
  },

  // 启动自动断开定时器
  startAutoDisconnectTimer() {
    this.clearAutoDisconnectTimer();  // 先清除可能存在的定时器
    console.log('启动自动断开定时器，将在', this.autoDisconnectDuration / 1000, '秒后断开连接');
    this.autoDisconnectTimer = setTimeout(() => {
      console.log('设备未使用超时，自动断开连接');
      this.disconnect();
    }, this.autoDisconnectDuration);
  },

  // 清除自动断开定时器
  clearAutoDisconnectTimer() {
    if (this.autoDisconnectTimer) {
      clearTimeout(this.autoDisconnectTimer);
      this.autoDisconnectTimer = null;
    }
  },

  // 重置自动断开定时器（在每次操作后调用）
  resetAutoDisconnectTimer() {
    if (this.data.isConnected) {
      this.startAutoDisconnectTimer();
    }
  },

  // 启动开门后自动断开定时器
  startDoorAutoDisconnectTimer() {
    this.clearDoorAutoDisconnectTimer();  // 先清除可能存在的定时器
    console.log('启动开门后自动断开定时器，将在', this.doorAutoDisconnectDuration / 1000, '秒后断开连接');
    this.doorAutoDisconnectTimer = setTimeout(() => {
      console.log('开门后超时，自动断开连接');
      this.disconnect();
    }, this.doorAutoDisconnectDuration);
  },

  // 清除开门后自动断开定时器
  clearDoorAutoDisconnectTimer() {
    if (this.doorAutoDisconnectTimer) {
      clearTimeout(this.doorAutoDisconnectTimer);
      this.doorAutoDisconnectTimer = null;
    }
  },

  // 断开连接
  disconnect() {
    console.log('开始断开连接...');
    this.clearAutoDisconnectTimer();  // 清除自动断开定时器
    this.clearDoorAutoDisconnectTimer();  // 清除开门后自动断开定时器
    bleManager.disconnect()
      .then(() => {
        console.log('断开连接成功');
        this.setData({
          isConnected: false,
          batteryPercent: 0,
          voltage: 0
        });
        wx.showToast({
          title: '已断开',
          icon: 'success'
        });
      })
      .catch(err => {
        console.error('断开连接失败:', err);
      });
  },

  // 打开指定门
  openDoor(e) {
    const door = e.currentTarget.dataset.door;
    console.log('准备打开', door, '号门');
    let command = '';
    
    switch(door) {
      case '1':
        command = 'AT+ON+PA4=500';
        break;
      case '2':
        command = 'AT+ON+PA7=500';
        break;
      case '3':
        command = 'AT+ON+PA1=500';
        break;
      case '4':
        command = 'AT+ON+PB2=500';
        break;
    }

    bleManager.sendCommand(command)
      .then(() => {
        console.log('开门指令发送成功:', command);
        wx.showToast({
          title: `已发送${door}号门指令`,
          icon: 'success'
        });
        // 重置自动断开定时器
        console.log('重置自动断开定时器');
        this.resetAutoDisconnectTimer();
        // 启动开门后自动断开定时器
        console.log('启动开门后自动断开定时器');
        this.startDoorAutoDisconnectTimer();
      })
      .catch(err => {
        console.error('开门指令发送失败:', err);
        wx.showToast({
          title: '发送指令失败',
          icon: 'none'
        });
      });
  },

  // 打开所有门
  openAllDoors() {
    console.log('准备打开所有门');
    bleManager.sendCommand('AT+ALL=500')
      .then(() => {
        console.log('打开所有门指令发送成功');
        wx.showToast({
          title: '已发送全部开门指令',
          icon: 'success'
        });
        // 重置自动断开定时器
        console.log('重置自动断开定时器');
        this.resetAutoDisconnectTimer();
        // 启动开门后自动断开定时器
        console.log('启动开门后自动断开定时器');
        this.startDoorAutoDisconnectTimer();
      })
      .catch(err => {
        console.error('打开所有门指令发送失败:', err);
        wx.showToast({
          title: '发送指令失败',
          icon: 'none'
        });
      });
  },

  // 跳转到我的页面
  goToMine() {
    wx.navigateTo({
      url: '/pages/mine/mine'
    })
  },
});
